<?php

namespace Keio\StudyBundle\Controller;

use Symfony\Component\HttpFoundation\Request;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;

use Keio\StudyBundle\Entity\Baihocketquakiemtra;
use Keio\StudyBundle\Entity\Package;
use Keio\StudyBundle\Entity\User;
use Keio\StudyBundle\Form\UserType;
use Keio\StudyBundle\Entity\Packageuser;

class MemberController extends Controller
{
	public function homeAction(){
		$user_id  = $this->get('security.context')->getToken()->getUser()->getId();
		$em = $this->getDoctrine()->getManager();

		//lấy các bài học mà member có quyền (thông qua package gắn kèm)
		//format là array
		$baihocR = $em->getRepository('KeioStudyBundle:Baihoc')->getBaihocByUser($user_id);

		return $this->render('KeioStudyBundle:Member:home.html.twig', array(
            'baihoc'      => $baihocR['baihoc'],
            'has_package' => count($baihocR['pkgs']),
            'memberid'    => $user_id,
        ));
	}
	//register
	public function registerAction(){
		$entity = new User();
        $form   = $this->createForm(new UserType(), $entity);

        return $this->render('KeioStudyBundle:Member:register.html.twig', array(
            'form'   => $form->createView(),
        ));
	}
	//nap the vao TK
	public function naptheAction(){
		$request = $this->getRequest();
		$memberid = $request->request->get('memberid');
		$cardno = $request->request->get('card');
		$cardno = trim($cardno);

		$em = $this->getDoctrine()->getManager();
		//check if cardno exist in DB and if already entered
		$card_status = $em->getRepository('KeioStudyBundle:Card')->checkCardExistAndUsed($cardno);
		if (($card_status['exist_notused_xuatkho']==1)){//exist and not already charged
			$pkguser = new Packageuser();
			$user = $em->getRepository('KeioStudyBundle:User')->find($memberid);
			$pkg  = $em->getRepository('KeioStudyBundle:Package')->find($card_status['packageid']);
			$pkguser->setPackage($pkg);
			$pkguser->setUser($user);
			//chi member chua co package moi nap
			$card = $em->getRepository('KeioStudyBundle:Card')->find($card_status['cardid']);
			$date = new \DateTime();
			$card->setDanap($date);
			$em->persist($pkguser);
			$em->persist($card);
	        $em->flush();
	        $msg = 'Nap the thanh cong. Xin cam on. Quay lai de su dung dich vu !';
	        $ok = 1;
		}else{
            $msg = 'Card number non exist or already used';
            $ok = 0;
		}

		return $this->render('KeioStudyBundle:Member:cardstatus.html.twig', array(
            'msg' => $msg,
            'ok'  => $ok,
        	));
	}

	public function detailbaihocAction($baihoc_id){
		$em = $this->getDoctrine()->getManager();
		$cauhoicuabaihoc = $em->getRepository('KeioStudyBundle:Cauhoi')->getCauhoiByBaihocId($baihoc_id);

		return $this->render('KeioStudyBundle:Member:detailbaihoc.html.twig', array(
            'cauhoicuabaihoc' => $cauhoicuabaihoc,
            'baihoc_id'       => $baihoc_id,
        ));

	}

	public function lambaiAction($cauhoi_id, $baihoc_id){
		$em = $this->getDoctrine()->getManager();
		//trong detail cau hoi co tra loi roi
		$detailcauhoi = $em->getRepository('KeioStudyBundle:Cauhoi')->getCauhoivatraloiById($cauhoi_id);

		//lay so cau hoi tiep theo trong bai hoc
		$nextprevious = $em->getRepository('KeioStudyBundle:Cauhoi')->getCauhoiNextPrevious($cauhoi_id, $baihoc_id);

		//lấy kết quả form submitted nếu đã trả lời
		$request = $this->getRequest();
		$usertraloi = $request->request->get('traloi');
		//Lấy luôn $request->get('traloi') cũng đc thì phải

		$kq_traloi = $this->checkIfLambaiCorrect($detailcauhoi['loai'], $detailcauhoi['traloi'], $usertraloi);
		$datraloi     = $kq_traloi['datraloi'];
        $traloidung   = $kq_traloi['traloidung'];
        $form_traloi  = $kq_traloi['form_traloi'];

		//Nếu submit từ form thì mới xử lý ($datraloi = 1)
		//nếu ko tìm thấy thì tạo mới
		if ($datraloi == 1){
			//UPDATE kết quả làm bài trong DB
			//lấy record lên. Nếu trong vòng 3h trở lại chưa có thì tạo mới
			$date_now = new \DateTime();
			$user_id  = $this->get('security.context')->getToken()->getUser()->getId();
			$record_ketqua = $em->getRepository('KeioStudyBundle:User')->getIdketquakiemtra($user_id, $baihoc_id, $date_now);
			if (count($record_ketqua)==0){
				$kq = new Baihocketquakiemtra();
				$kq->setDatecreate($date_now);
				$kq->setDateupdate($date_now);
				$usr = $em->getRepository('KeioStudyBundle:User')->find($user_id);
				$kq->setUser($usr);
				$kq->setBaihocid($baihoc_id);
				$bh = $em->getRepository('KeioStudyBundle:Baihoc')->find($baihoc_id);
				$kq->setBaihocname($bh->getName());
				$nbcauhoi = $em->getRepository('KeioStudyBundle:Baihoccauhoi')->getCountCauhoiByBaihoc($baihoc_id);
				$kq->setNbcauhoi($nbcauhoi);
				$kq->setNbcaudung($traloidung);
				$kq->setNbcausai(1-$traloidung);
			}else{
				$kq = $record_ketqua[0]; //lấy cái đầu tiên, vì đã order DSC của ID rồi
				$kq->setDateupdate($date_now);
				$kq->setNbcaudung($kq->getNbcaudung()+$traloidung);
				$kq->setNbcausai($kq->getNbcausai()+1-$traloidung);
			}
			//UPDATE DB
			$em->persist($kq);
	        $em->flush();
		}

		return $this->render('KeioStudyBundle:Member:lambai.html.twig', array(
            'detailcauhoi' => $detailcauhoi,
            'baihoc_id'    => $baihoc_id,
            'cautiep'      => $nextprevious['nex_id'],
            'cautruoc'     => $nextprevious['pre_id'],
            'datraloi'     => $kq_traloi['datraloi'],
            'traloidung'   => $kq_traloi['traloidung'],
            'idtraloidung' => $kq_traloi['id_traloi_dung'],
            'form_traloi'  => $form_traloi,
        ));


	}

	//xem kết quả làm bài
	public function xemketquaAction($baihoc_id){
		$em = $this->getDoctrine()->getManager();
		$user_id  = $this->get('security.context')->getToken()->getUser()->getId();

		$dataTable1 = array(); //init value
		$last_result = $em->getRepository('KeioStudyBundle:Baihocketquakiemtra')->getLastResultByUserAndBaihoc($user_id, $baihoc_id);
		if (count($last_result)>0){
			//kết quả gần nhất:
			$dataTable1 = $em->getRepository('KeioStudyBundle:Baihocketquakiemtra')->prepareDataPieKetquaForChart($last_result['nb_dung'], $last_result['nb_sai']);
		}

		$dataTableG = array(); //init value
		$global_result = $em->getRepository('KeioStudyBundle:Baihocketquakiemtra')->getGlobalResultByUserAndBaihoc($user_id, $baihoc_id);
		if (count($global_result)>0){
			$d = $global_result['nb_dung'];
			$s = $global_result['nb_sai'];
			//hic, tại sao +0 mới ra đồ thị đúng ???
			$dataTableG = $em->getRepository('KeioStudyBundle:Baihocketquakiemtra')->prepareDataPieKetquaForChart($d+0, $s+0);
		}

        return $this->render('KeioStudyBundle:Member:xemketqua.html.twig', array(
            'dataTable1'     => $dataTable1,
            'last_result'    => $last_result,
            'dataTableG'     => $dataTableG,
            'global_result'  => $global_result,
        ));
	}
	//check xem trả lời có đúng hay ko.
	//Nếu là trắc nghiệm, tìm xem số thứ tự xem đúng ko
	//Nếu là lại kia, xây dựng array kết quả và array trả lời rồi so sánh
	private function checkIfLambaiCorrect($cauhoi_loai, $traloi_db, $usertraloi){
		$id_traloi_dung = -1; //giá trị init thôi
		$form_traloi = ''; //init cái form
		$em = $this->getDoctrine()->getManager();

		if (count($usertraloi)==0){ //chưa trả lời
			$traloidung = -1;
			$datraloi   = 0;
		}else{ //đã trả lời, check xem đúng hay sai
			$datraloi   = 1;
			//cauhoi_loai = 0 là trắc nghiệm; 1 là loại điền
			if ($cauhoi_loai==0){
				//tìm ID câu trả lời đúng (đối với trường hợp trắc nghiệm)
				for ($j=0; $j<count($traloi_db); $j++){
					if ($traloi_db[$j]['dungsai']==true){
						$id_traloi_dung = $j;
						break;
					}
				}
				//so sánh trả lời của user với trả lời đúng
				if ($usertraloi==$id_traloi_dung){
					$traloidung = 1;
				}else{
					$traloidung = 0;
				}
			}else{
				$id_traloi_dung=0; //cai do dung luon
				$kq_frm = $em->getRepository('KeioStudyBundle:Cauhoitraloi')->constructKquaAndFormForNonTN($traloi_db);
				//tim array trả lời đúng để so sánh
				$kqua = $kq_frm['kqua'];
				if($usertraloi == $kqua){
					$traloidung = 1;
				}else{
					$traloidung = 0;
				}
			}
		}

		//tạo form, nếu chưa trả lời
		if ($datraloi == 0){
			if ($cauhoi_loai==0){
				for ($j=0; $j<count($traloi_db); $j++){
					//tạo form
					$form_traloi=$form_traloi.
						'<br><input type="radio" name="traloi" value="'.$j.'">'.
						$traloi_db[$j]['noidung'];
				}
			}else{
				$em = $this->getDoctrine()->getManager();
				$kq_frm = $em->getRepository('KeioStudyBundle:Cauhoitraloi')->constructKquaAndFormForNonTN($traloi_db);
				$form_traloi = $kq_frm['frm'];
			}
		}

		return array(
					'traloidung' => $traloidung,
					'datraloi'   => $datraloi,
					'id_traloi_dung' => $id_traloi_dung,
					'form_traloi'    => $form_traloi,
					);
	}

}
